home *** CD-ROM | disk | FTP | other *** search
- /*----------------------------------------------------------------------------
-
- charset.c
-
- This module deals with character set issues (currently only
- ISO 8859-1, Latin-1).
-
- Copyright © 1994-1995, Northwestern University.
-
- ----------------------------------------------------------------------------*/
-
- #include <string.h>
-
- #include "glob.h"
- #include "charset.h"
- #include "header.h"
- #include "memutil.h"
- #include "resutil.h"
-
-
-
- #define kLatin1ToMacTableID 1001
- #define kMacToLatin1TableID 1002
-
- #define kTableRsrcType 'taBL'
-
-
-
- static unsigned char **gLatin1ToMacTable = nil;
- static unsigned char **gMacToLatin1Table = nil;
-
-
-
- /*----------------------------------------------------------------------------
- MapLatin1ToMacPtr
-
- Map Latin-1 8 bit characters to Mac 8 bit characters.
-
- Entry: ptr = pointer to text to be mapped.
- len = length of text.
-
- Exit: function result = true if any 8 bit characters encountered.
- ----------------------------------------------------------------------------*/
-
- Boolean MapLatin1ToMacPtr (char *ptr, long len)
- {
- unsigned char *p, *pEnd;
- Boolean result = false;
- OSErr err = noErr;
- unsigned char *table;
-
- if (gLatin1ToMacTable == nil) {
- err = MyGet1Resource(kTableRsrcType, kLatin1ToMacTableID, &gLatin1ToMacTable);
- if (err != noErr) return false;
- }
- table = *gLatin1ToMacTable;
- for (p = (unsigned char*)ptr, pEnd = p + len; p < pEnd; p++) {
- if ((char)*p < 0) {
- *p = table[*p];
- result = true;
- }
- }
- return result;
- }
-
-
-
- /*----------------------------------------------------------------------------
- MapLatin1ToMacHandle
-
- Map Latin-1 8 bit characters to Mac 8 bit characters.
-
- Entry: text = handle to text to be mapped.
-
- Exit: function result = true if any 8 bit characters encountered.
- ----------------------------------------------------------------------------*/
-
- Boolean MapLatin1ToMacHandle (Handle text)
- {
- char state;
- Boolean result;
-
- state = MyHGetState(text);
- MyHLock(text);
- result = MapLatin1ToMacPtr(*text, MyGetHandleSize(text));
- MyHSetState(text, state);
- return result;
- }
-
-
-
- /*----------------------------------------------------------------------------
- MapLatin1ToMacStr
-
- Map Latin-1 8 bit characters to Mac 8 bit characters.
-
- Entry: str1 = pointer to source string.
- str2 = pointer to destination string (may be same as str1).
-
- Exit: function result = true if any 8 bit characters encountered.
- ----------------------------------------------------------------------------*/
-
- void MapLatin1ToMacStr (char *str1, char *str2)
- {
- unsigned char *p, *q;
- OSErr err = noErr;
- unsigned char *table;
-
- if (gLatin1ToMacTable == nil) {
- err = MyGet1Resource(kTableRsrcType, kLatin1ToMacTableID, &gLatin1ToMacTable);
- if (err != noErr) return;
- }
- table = *gLatin1ToMacTable;
- for (p = (unsigned char*)str1, q = (unsigned char*)str2; *p != 0; p++, q++) {
- *q = table[*p];
- }
- *q = 0;
- }
-
-
-
- /*----------------------------------------------------------------------------
- MapMacToLatin1Ptr
-
- Map Mac 8 bit characters to Latin-1 8 bit characters.
-
- Entry: ptr = pointer to text to be mapped.
- len = length of text.
-
- Exit: function result = true if any 8 bit characters encountered.
- ----------------------------------------------------------------------------*/
-
- Boolean MapMacToLatin1Ptr (char *ptr, long len)
- {
- unsigned char *p, *pEnd;
- Boolean result = false;
- OSErr err = noErr;
- unsigned char *table;
-
- if (gMacToLatin1Table == nil) {
- err = MyGet1Resource(kTableRsrcType, kMacToLatin1TableID, &gMacToLatin1Table);
- if (err != noErr) return false;
- }
- table = *gMacToLatin1Table;
- for (p = (unsigned char*)ptr, pEnd = p + len; p < pEnd; p++) {
- if ((char)*p < 0) {
- *p = table[*p];
- result = true;
- }
- }
- return result;
- }
-
-
-
- /*----------------------------------------------------------------------------
- MapMacToLatin1Handle
-
- Map Mac 8 bit characters to Latin-1 8 bit characters.
-
- Entry: text = handle to text to be mapped.
-
- Exit: function result = true if any 8 bit characters encountered.
- ----------------------------------------------------------------------------*/
-
- Boolean MapMacToLatin1Handle (Handle text)
- {
- char state;
- Boolean result;
-
- state = MyHGetState(text);
- MyHLock(text);
- result = MapMacToLatin1Ptr(*text, MyGetHandleSize(text));
- MyHSetState(text, state);
- return result;
- }
-